<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>async & await</title>
</head>
<body>
<script>
  /*
  * async会将返回值封装为 Promise 而且是fulfilled状态的
  * 之前我们都是使用Promise.resolve()来进行封装，现在不需要了
  * */
  async function foo(){
    return 1
  }
  console.log(foo());

  /*
  * async只是会将返回值封装为Promise函数内部的其他逻辑不会被影响
  *
  * */
  async  function foo1(){
    console.log(222);
  }
  foo1()
  console.log(foo1());

  /*
  * await的作用类似于then
  * 但是await只能在async中使用
  *
  * 使用async和await可以将异步代码像同步代码那样写
  * */
  (async () =>{

    try {
      let a = await new Promise((resolve, reject) => {
        reject(200)
      })
    } catch (e) {
      console.log(e);
    }
  })()

  async function wait() {
    await new Promise(resolve => setTimeout(resolve, 1000));

    return 10;
  }
  /*
  * async函数可以直接调用
  * */
  // console.log(wait());

  /*
  * 在一个普通函数中调用async函数要么使用then catch
  * 要么使用 await
  * */
  function ty(){
    wait().then(console.log).catch(console.log)
  }

  ty()
</script>
</body>
</html>